package com.tangyee.home_exercise_step.activities;

import android.content.Intent;
import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
import android.support.constraint.ConstraintLayout;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.CardView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.DatePicker;
import android.widget.ImageView;
import android.widget.NumberPicker;
import android.widget.NumberPicker.OnScrollListener;
import android.widget.NumberPicker.OnValueChangeListener;
import android.widget.TextView;
import android.widget.Toast;

import com.tangyee.R;
import com.tangyee.home_exercise_step.StepActivity;
import com.tangyee.home_exercise_step.bean.StepData;
import com.tangyee.home_exercise_step.bean.TargetNumberData;

import org.litepal.LitePal;

import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

/*
选择运动目标界面
 */
public class StepTarget extends AppCompatActivity implements OnValueChangeListener, OnScrollListener {

    //选择运动目标这个界面的标题
    private ConstraintLayout stepTarget;
    //选择运动目标这个界面的返回键
    private ImageView tarLeft;
    //选择运动目标这个界面的确认键
    private CardView tarSure;
    //选择运动目标这个界面的数字选择器
    private NumberPicker numberPicker;


    //存放目标值的字符串数组
    private String[] tarNumber = new String[29];
    private int j = 0;
    //已经确定的运动目标值
    private String targetNumber;
    //今日的日期
    private String CURRENTDATE;

    //判断目标值是否改变
    private boolean flag = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_step_target);

        stepTarget = findViewById(R.id.step_tar);
        tarLeft = findViewById(R.id.tar_left);
        tarSure = findViewById(R.id.tar_sure);
        numberPicker = findViewById(R.id.numberPicker);

        //得到当前界面的装饰视图
        if(Build.VERSION.SDK_INT >= 21) {
            View decorView = getWindow().getDecorView();
            //让应用主题内容占用系统状态栏的空间,注意:下面两个参数必须一起使用 stable 牢固的
            int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
            decorView.setSystemUiVisibility(option);
            //设置状态栏颜色为透明
            getWindow().setStatusBarColor(Color.TRANSPARENT);
        }

        tarLeft.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

        tarSure.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d("mmp", "taegetNumber: " + targetNumber);
                CURRENTDATE = getTodayDate();
                List<StepData> list = LitePal.where("today = ?", CURRENTDATE).find(StepData.class);
                List<TargetNumberData> targetNumberDataList = LitePal.findAll(TargetNumberData.class);
                if (!list.isEmpty() && !targetNumberDataList.isEmpty()) {
                    StepData stepData = list.get(0);
                    TargetNumberData targetNumberData = targetNumberDataList.get(0);
                    //因为选择器有默认值8000，所以当打开选择器的时候，如果没有改变其默认值，
                    //onValueChange将不会被触发，而这时候点击了确定按钮，将没有值返回，
                    //所以用个flag判断是否触发了onValueChange，如果没有触发，则需要手动将8000写进数据库中
                    if (flag) {
                        stepData.setTargetNumber(targetNumber);
                        targetNumberData.setTargetNumber(targetNumber);
                    } else {
                        stepData.setTargetNumber("8000");
                        targetNumberData.setTargetNumber("8000");

                    }
                    targetNumberData.update(1);
                    stepData.updateAll("today=?", CURRENTDATE);
                    Log.d("mmp", "onClick : " + stepData.getTargetNumber() + "步");
                }
                finish();
            }
        });

        init();

    }

    //设置选择器的最大值和最小值，以及添加监听事件
    private void init() {
        for (int i = 2000; i <= 30000; i = i + 1000) {
            String str = addComma(i + "");
            tarNumber[j] = str;
            j++;
        }
        numberPicker.setOnScrollListener(this);
        numberPicker.setOnValueChangedListener(this);
        numberPicker.setMaxValue(tarNumber.length - 1);
        numberPicker.setMinValue(0);
        numberPicker.setValue(6);
        numberPicker.setDisplayedValues(tarNumber);
        numberPicker.setWrapSelectorWheel(false);
        numberPicker.setDescendantFocusability(DatePicker.FOCUS_BLOCK_DESCENDANTS);
    }

    @Override
    public void onValueChange(NumberPicker picker, int oldVal, int newVal) {

        Log.i("mmp", "onValueChange: 原来的值 " + oldVal + "--新值: "
                + newVal);
        targetNumber = remove(tarNumber[newVal]);
        flag = true;
        Log.d("mmp", "选中的值为：" + targetNumber);
        Log.d("mmp", "newVal:" + newVal);
    }

    @Override
    public void onScrollStateChange(NumberPicker view, int scrollState) {

    }

    /**
     * 将每三个数字加上逗号处理（通常使用金额方面的编辑）
     *
     * @param str 需要处理的字符串
     * @return 处理完之后的字符串
     */
    private String addComma(String str) {
        DecimalFormat decimalFormat = new DecimalFormat(",###");
        return decimalFormat.format(Double.parseDouble(str));
    }

    //去掉字符串中的特定字符,在这里去掉逗号
    private String remove(String str) {
        str = str.replace(",", "");
        return str;
    }

    //获得今日的日期
    private String getTodayDate() {
        Date date = new Date(System.currentTimeMillis());
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        return simpleDateFormat.format(date);
    }

}
